﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Data.Objects;

namespace SCEM.DTO
{
    /// <summary>
    /// DTO de fornecedores.
    /// </summary>
    [DataContract]
    public class FornecedorDTO : IDTO<Fornecedor>
    {
        public Fornecedor ConvertToEntity(ObjectContext context)
        {
            Fornecedor fornecedor = new Fornecedor();
            SCEMContainer scemContext = (SCEMContainer)context;
            Guid guid;

            // Verificar se o DTO representa uma entidade que já está persistida no banco e, em caso positivo, buscar ela no banco
            if (!String.IsNullOrEmpty(Id) && Guid.TryParse(Id, out guid))
            {
                var queryFornecedor = from f in scemContext.Fornecedores
                                      where f.Id == guid
                                      select f;

                if (queryFornecedor.Count() == 1)
                    fornecedor = queryFornecedor.First();
            }

            // Tratar corretamente o caso de o DTO ser uma nova entidade a ser persistida no banco
            if (fornecedor.Id == Guid.Empty)
            {
                fornecedor.Id = Guid.NewGuid();
                fornecedor.Ativo = true;
            }

            // DTO -> Entidade
            fornecedor.Codigo = Codigo;
            fornecedor.CNPJ = CNPJ;
            fornecedor.NomeFantasia = NomeFantasia;
            fornecedor.RazaoSocial = RazaoSocial;
            fornecedor.NomeRepresentante = NomeRepresentante;
            fornecedor.EmailRepresentante = EmailRepresentante;
            fornecedor.CEP = CEP;
            fornecedor.Endereco = Endereco;
            fornecedor.Cidade = Cidade;
            fornecedor.Pais = Pais;
            fornecedor.Telefone1 = Telefone1;
            fornecedor.Telefone2 = Telefone2;

            return fornecedor;
        }

        [DataMember]
        public string Id { get; set; }

        [DataMember]
        public string Codigo { get; set; }

        [DataMember]
        public string CNPJ { get; set; }

        [DataMember]
        public string NomeFantasia { get; set; }

        [DataMember]
        public string RazaoSocial { get; set; }

        [DataMember]
        public string NomeRepresentante { get; set; }

        [DataMember]
        public string EmailRepresentante { get; set; }

        [DataMember]
        public string CEP { get; set; }

        [DataMember]
        public string Endereco { get; set; }

        [DataMember]
        public string Cidade { get; set; }

        [DataMember]
        public string Pais { get; set; }

        [DataMember]
        public string Telefone1 { get; set; }

        [DataMember]
        public string Telefone2 { get; set; }

        [DataMember]
        public bool Ativo { get; set; }
    }
}
